package com.gcc.securityform.controller;

import com.gcc.securityform.model.User;
import com.gcc.securityform.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.gcc.securityform.service.UserService; // 【新增】

@Controller
public class MainController {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private PasswordEncoder passwordEncoder;
    @Autowired
    private UserService userService; // 【新增】注入 UserService

    // 任何人都可以访问的主页
//    @GetMapping("/")
//    @ResponseBody
//    public String home() {
//        return "欢迎来到主页！<br/><a href='/dashboard'>点击进入仪表盘</a><br/><a href='/logout'>退出登录</a>";
//    }
    @GetMapping("/")
    @ResponseBody
    public String home()
    {
        return "欢迎来到主页<br/><a href='/dashboard'>点击进入仪表盘</a><br/><a href='/admin'>点击进入管理员页面</a><br/><a href = '/logout'>退出登录";
    }

    // 只有已认证用户才能访问的仪表盘
    @GetMapping("/dashboard")
    @ResponseBody
    @PreAuthorize("isAuthenticated()")
    public String dashboard() {
        return "欢迎来到仪表盘！你已成功登录。<br/><a href='/'>返回主页</a><br/><a href='/logout'>退出登录</a>";
    }

    @GetMapping("/admin")
    @ResponseBody
    @PreAuthorize("hasRole('ADMIN')")
    public String adminpanel(){
        return "欢迎来到管理员页面！你拥有管理员权限。";
    }
    // 登录页面，任何人都可访问
    @GetMapping("/login")
    public String loginPage() {
        return "login"; // 返回 login.html 模板
    }

    // 用于创建新用户的注册接口
    @PostMapping("/register")
    @ResponseBody
    public String registerUser(@RequestBody User user) {
        user.setPassword(passwordEncoder.encode(user.getPassword()));
        user.setRole("ROLE_USER");
        userRepository.save(user);
        return "用户注册成功！请返回登录页面。";
    }
    @PostMapping("/admin/register")
    @ResponseBody
    public String registerAdmin(@RequestBody User user){
        user.setPassword(passwordEncoder.encode(user.getPassword()));
        user.setRole("ROLE_ADMIN");
        userRepository.save(user);
        return  "管理员注册成功！";
    }
    // 【新增】一个管理员专用的删除接口
    // 注意：这个方法本身不需要 @PreAuthorize，因为安全检查已经移到了 Service 层
    @PostMapping("/admin/deleteUser")
    @ResponseBody
    public String deleteUser(@RequestParam Long userId) {
        userService.deleteUser(userId);
        return "用户 " + userId + " 已删除。";
    }

}
